package com.example.study1.ObjectorientedProcessoriented;

/**
 * 面向对象编程示例：智能咖啡制作系统
 * 关注的是对象协作，每个对象封装特定功能
 */
public class ObjectOrientedCoffeeSystem {

    // 咖啡豆类 - 封装咖啡豆的属性和行为
    static class CoffeeBean {
        private String origin;    // 产地
        private String roastLevel; // 烘焙程度

        public CoffeeBean(String origin, String roastLevel) {
            this.origin = origin;
            this.roastLevel = roastLevel;
        }

        /**
         * 咖啡豆被研磨的行为
         */
        public void grind() {
            System.out.println("研磨来自" + origin + "的" + roastLevel + "烘焙咖啡豆");
        }
    }

    // 智能咖啡机类 - 封装复杂的咖啡制作逻辑
    static class SmartCoffeeMachine {
        private String brand;
        private int waterTemperature;

        public SmartCoffeeMachine(String brand) {
            this.brand = brand;
            this.waterTemperature = 0;
        }

        /**
         * 制作咖啡的核心方法
         * 封装了复杂的内部操作，对外提供简单接口
         */
        public void makeCoffee(CoffeeBean bean) {
            System.out.println(brand + "咖啡机开始工作...");
            heatWater();           // 加热水
            bean.grind();          // 与咖啡豆对象交互
            brew();               // 冲泡
            notifyComplete();     // 通知完成
        }

        private void heatWater() {
            this.waterTemperature = 92;
            System.out.println("水温已加热至" + waterTemperature + "°C");
        }

        private void brew() {
            System.out.println("正在进行精准冲泡...");
        }

        private void notifyComplete() {
            System.out.println("咖啡制作完成，请享用！");
        }
    }

    // 调料管理器类 - 封装调料添加功能
    static class CondimentManager {
        private boolean hasSugar;
        private boolean hasMilk;

        public CondimentManager(boolean sugar, boolean milk) {
            this.hasSugar = sugar;
            this.hasMilk = milk;
        }

        /**
         * 自动添加调料
         */
        public void addCondiments() {
            if (hasSugar) {
                System.out.println("自动添加天然蔗糖...");
            }
            if (hasMilk) {
                System.out.println("自动添加新鲜牛奶...");
            }
        }
    }

    // 用户类 - 封装用户操作
    static class User {
        private String name;
        private String preference;

        public User(String name, String preference) {
            this.name = name;
            this.preference = preference;
        }

        /**
         * 用户享受咖啡的方法
         * 体现了面向对象的简单交互
         */
        public void enjoyCoffee(SmartCoffeeMachine machine,
                                CoffeeBean bean,
                                CondimentManager condiments) {
            System.out.println(name + "想要一杯" + preference + "的咖啡");
            machine.makeCoffee(bean);     // 委托给咖啡机
            condiments.addCondiments();   // 委托给调料管理器
            System.out.println(name + "正在享受美味的咖啡");
        }
    }

    public static void main(String[] args) {
        // 创建各个对象 - 每个对象都有明确的职责
        User user = new User("咖啡爱好者", "香浓");
        SmartCoffeeMachine machine = new SmartCoffeeMachine("德龙智能系列");
        CoffeeBean bean = new CoffeeBean("哥伦比亚", "中度");
        CondimentManager condiments = new CondimentManager(true, true);

        // 对象间协作完成复杂任务
        user.enjoyCoffee(machine, bean, condiments);
    }
}

/*

        咖啡爱好者想要一杯香浓的咖啡
        德龙智能系列咖啡机开始工作...
        水温已加热至92°C
        研磨来自哥伦比亚的中度烘焙咖啡豆
        正在进行精准冲泡...
        咖啡制作完成，请享用！
        自动添加天然蔗糖...
        自动添加新鲜牛奶...
        咖啡爱好者正在享受美味的咖啡
*/
